package au.com.handsunited.service;

import java.util.List;
import java.util.Map;

import au.com.handsunited.model.BaseEntity;
import au.com.handsunited.model.Project;
import au.com.handsunited.model.User;
import au.com.handsunited.model.invitations.Invitation;
import au.com.handsunited.model.skill.Skill;

/**
 *
 * @author arunda
 */
public interface ProjectService {


	Project getProject(String projectId);

	Project getProject(Long id);

	Project createProject(Project project, BaseEntity owner, BaseEntity creator);

	List<Project> searchForProjectsByCriteria(Project searchCriteria);

	List<Project> searchForProjectsByKeywords(String keywords);

	List<Project> getAllProjects();

	Project updateProject(Project project, BaseEntity updater);

	boolean addMemberToProject(Project project, BaseEntity joiningEntity);

	boolean removeMemberFromProject(Project project, BaseEntity member);

	boolean deleteProject(Project project, BaseEntity projectDeleter);

	List<Project> findProjectsNeedingSkills(List<Skill> skills);

	List<Project> findProjectsSimilarTo(Project project);

	Invitation inviteProject(User user, String projectName, String contactName,
			String emailAddress, String message);

	Map<String, List<Invitation>> inviteToProject(Project project,
			User invitingUser, List<BaseEntity> invitees, String emailAddresses,
			String message);

}
